package com.project.biz;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.project.entity.CmsProduct;
import com.project.pojo.dto.ProductDTO;
import com.project.pojo.dto.ProductDetailDTO;
import com.project.pojo.dto.ProductExportDTO;
import com.project.pojo.dto.ProductSpecAndSkuDTO;
import com.project.pojo.model.*;

import java.util.List;

/**
 * @Description: 商品业务层接口类
 * @Author: zhuchi
 * @CreateDate: 2020/10/14 19:58
 * @Version: 1.0
 */
public interface CmsProductBiz extends IService<CmsProduct> {

    /**
     * 分页查询商品
     * @param productModel
     * @return
     */
    IPage<ProductDTO> selectProduct(ProductModel productModel);

    /**
     * 查询商品返回List
     * @param productModel
     * @return
     */
    List<ProductDTO> selectProductList(ProductModel productModel);

    /**
     * 根据商品ID获取商品信息
     * @param productId
     * @return
     */
    ProductDTO selectProductById(Long productId);

    /**
     * 添加商品
     * @param addProductModel
     * @param userId
     * @return
     */
    int addProduct(AddProductModel addProductModel, Long userId);

    /**
     * 修改商品
     * @param updateProductModel
     * @param userId
     * @return
     */
    int updateProduct(UpdateProductModel updateProductModel, Long userId);

    /**
     * 获取商品详情
     * @param productId
     * @return
     */
    ProductDetailDTO getProductDetail(Long productId);

    /**
     * 删除商品
     * @param productId
     * @param userId
     * @return
     */
    int delProduct(Long productId, Long userId);

    /**
     * 商品上下架
     * @param updateProductStateModel
     * @param userId
     * @return
     */
    int updateProductState(UpdateProductStateModel updateProductStateModel, Long userId);

    /**
     * 根据商品ID获取商品规格及SKU信息
     * @param productId
     * @return
     */
    ProductSpecAndSkuDTO getProductSpecAndSku(Long productId);

    /**
     * 商品评论数量+1
     * @param productId
     * @return
     */
    int addProductEvaNum(Long productId);

    /**
     * 增加商品销量
     * @param productId
     * @param num
     * @return
     */
    int addProductSales(Long productId, Integer num);

    /**
     * 修改商品排序值
     * @param updateProductSortModel
     * @param userId
     * @return
     */
    int updateProductSort(UpdateProductSortModel updateProductSortModel, Long userId);

    /**
     * 商品导出查询
     * @param productModel
     * @return
     */
    List<ProductExportDTO> selectExportProductData(ProductModel productModel);

}
